// 这里头文件的作用是帮助我们进行
#pragma once

#include <iostream>
#include <cstdlib>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

#define NULLPATH "/dev/null"
#define CHDIRPATH "/"
void Daemon(bool ischdir,bool isclose)
{
    // 创建守护进程
    // 1. 关闭一些不必要的信号
    ::signal(SIGPIPE,SIG_IGN);
    ::signal(SIGCHLD,SIG_IGN);

    // 保证进程不属于组长
    if(fork() > 0) ::exit(0);
    pid_t id = setsid();
    (void)id;

    if(ischdir) ::chdir(CHDIRPATH);

    if(isclose)
    {
        ::close(0);
        ::close(1);
        ::close(2);
    }
    else
    {
        int fd = ::open(NULLPATH,O_WRONLY);
        // 对三个默认的流进行重定向
        ::dup2(fd,0);
        ::dup2(fd,1);
        ::dup2(fd,2); 
        close(fd);
    }
    
}
